use args::{ArgParser, OptionDef};

fn main() {
    // 创建参数解析器
    let mut parser = ArgParser::new("示例程序", "这是一个演示命令行参数解析库的示例程序");
    
    // 添加选项定义
    parser.add_option(OptionDef::new(Some('v'), Some("verbose".to_string()), "启用详细输出模式", false))
          .add_option(OptionDef::new(Some('h'), Some("help".to_string()), "显示帮助信息", false))
          .add_option(OptionDef::new(Some('n'), Some("name".to_string()), "指定名称", true))
          .add_option(OptionDef::new(Some('c'), Some("count".to_string()), "指定数量", true));
    
    // 解析命令行参数
    match parser.parse() {
        Ok(args) => {
            // 检查是否需要显示帮助信息
            if args.has_option("help") {
                println!("{}", parser.help());
                return;
            }
            
            // 处理详细输出模式
            if args.has_option("verbose") {
                println!("详细输出模式已启用");
            }
            
            // 处理名称选项
            if let Some(name) = args.get_option("name") {
                println!("名称: {}", name);
            }
            
            // 处理数量选项
            if let Some(count_str) = args.get_option("count") {
                match count_str.parse::<i32>() {
                    Ok(count) => println!("数量: {}", count),
                    Err(_) => println!("错误: 数量必须是一个整数"),
                }
            }
            
            // 处理位置参数
            let positional = args.get_positional();
            if !positional.is_empty() {
                println!("位置参数:");
                for (i, arg) in positional.iter().enumerate() {
                    println!("  {}: {}", i + 1, arg);
                }
            }
        },
        Err(err) => {
            eprintln!("错误: {}", err);
            eprintln!("\n{}", parser.help());
            std::process::exit(1);
        }
    }
}
